Repository navigation
docs(skills): the platform skill teaches the package customizations read's contributions - #30071
Conversation
…ead's contributions Names `contributions` and `counts.contributions` beside the overrides, extensions and switched-off items, paid for by deleting three restatements in the same file. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01J8VVAjMvCpqNhHkd2m3T5A
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J Contract-review-claim: session_01J8VVAnMUWA9rufXzFaEh4J · head 21e8aa1 · 2026-11-04T12:36Z The seat review runs at CONTRACT_REVIEW_TIER in an isolated subagent (the seat session is not at that tier). No review seat ( Generated by Claude Code |
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J Contract reviewServed-tier: Reviewer: an isolated contract reviewer at CONTRACT_REVIEW_TIER, read-only on GitHub (REST reads only; nothing written, pushed or commented), fed the card body and comments, the PR body, the net diff against the merge-base, the head's check-runs, AGENTS.md, the pm-dispatch SKILL.md 路径分叉 section, contract-review.md, review-checklist.md, lanes/skills.md and lanes/review.md. The dev gate record was read as input, not as conclusions; every count and every claim about the schema and the runtime below is this review's own reading of the trees named. No environment variable value is printed anywhere in this record. ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgmentPer hits file, against the card's scenario (an AI reading the skill must learn that the customizations read answers a fourth list, what each entry carries per kind, and that the count is of items) and the code on main:
Must-fix: none. Should-fix: none. The out-of-scope spec/runtime disagreement on a disabled package's Check-runs at record time: 40 check-runs on 21e8aa1, 26 success, 13 skipped, 0 failure, 1 in progress on the third read (Test Core 1/8); three reads went 15 → 25 → 26 success with no non-success completion at any read (the first read, at 40 runs, had nine in progress: Lint · CI, release & engine gates, Lint · ESLint, Lint · docs & code guards, Lint · repo & tooling gates, Live E2E UI, Test Core 1/8 and 2/8, Type Check · consumer gates, Type Check · source gates; all but Test Core 1/8 completed success). Success: Lint & Repo Gates, Lint · repo & tooling gates, Lint · CI, release & engine gates, Lint · PM dispatch-gates, Lint · docs & code guards, Lint · ESLint, Lint · scoped · tooling self-tests, Lint · scoped · slot lookup & corpus, Lint · scoped · query-options erasure, TypeScript Type Check, Type Check · workspace / source gates / debt ledger / consumer gates, Build Core, Governed Surface Queue Guard, Dogfood Regression Gate, Test UI, Test Core (2/8), Plan Test Core shards, Live E2E UI, PR-body guards, Check Changeset, Check PR Size, Auto Label, filter. Skipped by path filter or opt-in: Build Docs, Build UI Deps, Build & E2E UI, Lint UI, Type Check UI, UI Published Artifacts, Dogfood Verify CLI, Temporal Conformance, Schedule gate, 18.x upgrade harness, Packed-tarball smoke, and the matrix-templated placeholder rows for Test UI and the Dogfood shards. Combined status Implemented-by: VERDICT: PASS Generated by Claude Code |
|
domain:skills#1 · huangyiirene · session_01J8VVAnMUWA9rufXzFaEh4J 维护者速读
席位核对 — ACCEPT · domain:skills#1 · head
|
Requested by Irene · project thread
Fixes #29411
Clause-②: no
Metadata-protocol: none
The Fable mandate was waived by the maintainer; this PR was developed on Opus.
维护者速读
GET /packages/<id>/customizations段后新增一段,教读取结果的contributions成员:每个其他包加到基础包上的条目一条,带packageId;field/flow条目给出所在的基础包object,nav条目给出基础包的app、目标group(有则给)和条目 id(name);counts.contributions数的是条目而非包。另加一个'@objectstack/skills': patchchangeset。GetPackageCustomizationsResponseSchema早已声明contributions(runtime: a served read naming which package contributes to an installed base — extension fields, flows on its objects, navigation entries — so Studio can draw contributed items greyed with their source (ADR-0029 D7, ADR-0146 D3) #28722 已在 main 上产出nav条目),技能只说该读取列出 overrides、extensions 和 switched-off,AI 读不到第四个列表。skills/objectstack-platform/SKILL.md新段(L132)与三处删除;对照packages/spec/src/api/package-lifecycle.zod.ts的contributions与counts.contributions。node scripts/check-skills-token-ratchet.mjs,预期 platform SKILL.md 6000/6011。skills/**),需要GOVERNED_APPROVERS的批准;PR 保持 draft。What changes
skills/objectstack-platform/SKILL.md, "Customizing an installed package (ADR-0146)". A new paragraph after the one that introducesGET /packages/hotcrm/customizations(that paragraph is byte-identical):Each fact is read off
mainatc23501b2:GetPackageCustomizationsResponseSchema.contributions(packages/spec/src/api/package-lifecycle.zod.ts): a discriminated union onkind; thefield/flowarm carriesobject,name,packageId; thenavarm carriesapp, optionalgroup,name(the nav item's id),packageId.packageIdis never the base nor its pair.counts.contributions: "contributions.length: items, not packages."navis served on main.readBaseContributionsinpackages/runtime/src/domains/packages.tspushes{ kind: 'nav', app, group?, name: id, packageId }fromregistry.getAppNavContributions(app)for each app the base owns (runtime: a served read naming which package contributes to an installed base — extension fields, flows on its objects, navigation entries — so Studio can draw contributed items greyed with their source (ADR-0029 D7, ADR-0146 D3) #28722 closed;packages-customizations.test.tspins it). So the paragraph teaches it plainly, with no "not yet served" mark.isPackageDisabledonly to thenavloop (a disabled package's flow is simply not registered; fields are not filtered), so a general sentence would overstate it, and the card did not ask for it..changeset/29411-platform-skill-package-contributions.md:'@objectstack/skills': patch, withClause-②: noandMetadata-protocol: none.@objectstack/skillsships this catalog, so the change publishes and takes a changeset, neverskip-changeset.Token ratchet, paid in place (no ceiling row moved, no re-wrap)
skills/objectstack-platform/SKILL.mdThe new paragraph is paid for by three deletions in the same file, each a restatement whose rule keeps a home there. The lines around each cut are byte-identical; nothing was rewrapped.
ObjectStackDefinitionSchemainnode_modules/@objectstack/spec/src/stack.zod.ts; each collection's item schema sits in its domain folder (…)." (3 lines and the blank line, 201 bytes). Home: the References section ("AlwaysReadthe source for exact field shapes") andreferences/_index.md, which listsstack.zod.tsand every domain schema file.check:skill-top-level-keysreads the enumeration paragraph above it by its own anchor, not this line.demoStaffwhenever the demo needs an account to exist." (the last sentence of Demo accounts). Home: the section's opening, which says a seed cannot create an account and to "Declare the people indemoStaff", and the sentence before it, which saysdevLoginscreates nothing.Why
The skill told an author that the customizations read lists overrides, extensions and switched-off items, and stopped there. The schema has served a fourth list,
contributions, plus its count, since #28722; an AI reading only the skill would not know other packages' fields, flows and nav items come back on the same read, or would readcounts.contributionsas a package count.Verification
Head
21e8aa1a(one commit onc23501b2).Local gates on 21e8aa1: 45 derived, 45 run with exit 0, 0 NOT MEASURED (`dispatch-gates --ran`)
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderived 45 commands for the two changed files. All 45 ran afterpnpm install --frozen-lockfileand a fullpnpm build(exit 0), each with a 900 s timeout and its exit code captured before any pipe.check-skills-token-ratchet.mjs(and--self-test),check-changeset-no-major.mjs,check-empty-changeset.mjs,check:changeset-gate-self-tests,check-comment-mask-corpus.mjs,check:skill-docs,check:skill-top-level-keys,check:skill-identifier-liveness,check:skill-frame-sync,check:skill-compatibility,check:role-word,check:dts-closure,check:dual-build-cjs-loadsandcheck:lean-entry-closure.--ranprinted:45 derived famil(ies) accounted for — 45 run, 0 NOT-MEASURED.node scripts/check-commit-card-trailers.mjs --range origin/main..HEAD: exit 0 (one commit, no card relation, model-free trailer pair).git push(the branch, 21e8aa1); one relaypr_create; no GitHub MCP write.skills/objectstack-platform/evals/config-plugins-ops.jsoncovers the customizations read, so none is run or added for the new paragraph. Two cases (L116, L134) cover the Demo accounts section that cut 3 touches; their expected outputs rest on the sentences that stay (demoStaffcreates the accounts,devLoginscreates nothing), so they read the same.Human Minimum
packages/specholds no runtime logic. (No schema touched.)pnpm lintis CI's repo-wide run.main, one pull request.packages/specnot touched.content/docs/references/,packages/*/CHANGELOG.mdorcontent/docs/releases/.🤖 Generated with Claude Code
https://claude.ai/code/session_01J8VVAjMvCpqNhHkd2m3T5A